/*************************************************************************
	> File Name: 002.HZOJ275.cpp
	> Author: Maureen 
	> Mail: Maureen@qq.com 
	> Created Time: 三  2/24 13:51:14 2021
 ************************************************************************/

/**
 *题目描述
很久很久以前，森林里住着一群兔子。有一天，兔子们想要研究自己的 𝐷𝑁𝐴 序列。我们首先选取一个好长好长的 𝐷𝑁𝐴 序列（小兔子是外星生物，𝐷𝑁𝐴 序列可能包含 26 个小写英文字母），然后我们每次选择两个区间，询问如果用两个区间里的 𝐷𝑁𝐴 序列分别生产出来两只兔子，这两个兔子是否一模一样。注意两个兔子一模一样只可能是他们的 𝐷𝑁𝐴 序列一模一样。

输入
第一行一个 𝐷𝑁𝐴 字符串 𝑆。

接下来一个数字 𝑚，表示 𝑚 次询问。

接下来 𝑚 行，每行四个数字 𝑙1,𝑟1,𝑙2,𝑟2，分别表示此次询问的两个区间，注意字符串的位置从 1 开始编号。

输出
对于每次询问，输出一行表示结果。如果两只兔子完全相同输出 𝑌𝑒𝑠，否则输出 𝑁𝑜。
 *
 */

//分析：对要比较的两个字符串对不同的模数P进行两次哈希，如果每次哈希值的结果都相等，那么这两个字符一定相等

#include <iostream>
using namespace std;

#define P 9973
#define base 13
#define P1 10007
#define base1 103
#define MAX_N 1000000

long long inv[P];
long long inv1[P1];
long long K[MAX_N + 5];
long long K1[MAX_N + 5];
long long H[MAX_N + 5];
long long H1[MAX_N + 5];
char s[MAX_N + 5];

void init() {
    inv[1] = 1;
    for (long long i = 2; i < P; i++) inv[i] = ((-(P / i) * inv[P % i]) % P + P) % P;
    inv1[1] = 1;
    for (long long i = 2; i < P1; i++) inv1[i] = ((-(P1 / i) * inv1[P1 % i]) % P1 + P1) % P1;
    K[0] = 1;
    K1[0] = 1;
    for (long long i = 1; i <= MAX_N; i++) {
        K[i] = (K[i - 1] * base) % P;
        K1[i] = (K1[i - 1] * base1) % P1;
    }
    H[0] = 0;
    H1[0] = 0;
    for (long long i = 1; s[i]; i++) {
        H[i] = (H[i - 1] + s[i] * K[i]) % P;
        H1[i] = (H1[i - 1] + s[i] * K1[i]) % P1;
    }
    return ;
}

long long getH(long long l, long long r) {
    return ((H[r] - H[l - 1]) % P * inv[K[l]] % P + P) % P;
} 

long long getH1(long long l, long long r) {
    return ((H1[r] - H1[l - 1]) % P1 * inv1[K1[l]] % P1 + P1) % P1;
} 

int main() {
    scanf("%s", s + 1);
    long long m, l1, r1, l2, r2;
    init();
    scanf("%lld", &m);
    for (long long i = 0; i < m; i++) {
        scanf("%lld%lld%lld%lld", &l1, &r1, &l2, &r2);
        //如果每次进行哈希的结果两个字符串都相等，则两个字符串一定相等
        if (getH(l1, r1) == getH(l2, r2) && getH1(l1, r1) == getH1(l2, r2)) 
            printf("Yes\n");
        else 
            printf("No\n");
    }
    return 0;
}
